<!doctype html>
<html>
<head>
<style>
body { overflow:hidden; }

.testDiv {
    width: 200px;
    height: 20px;
    border: 1px solid black;
    white-space: nowrap;
    overflow: hidden;
}

.forcertl {
    direction: rtl;
    unicode-bidi: bidi-override;
}

.ellipses {
    text-overflow:ellipsis;
}

</style>
</head>
<body>
<div id="warning">
This test requires window.internals. If you use content_shell,
"--expose-internals-for-testing" command flag enables it.
</div>

LTR
<div id="testLTR" class="testDiv" contenteditable="true">the the adlj adaasj sdklj. there there</div>

RTL
<div id="testRTL" class="testDiv forcertl" contenteditable="true">the the adlj adaasj sdklj. there there</div>

LTR (text-overflow:ellipses)
<div id="testLTREllipses" class="testDiv ellipses" contenteditable="true">the the adlj adaasj sdklj. there there</div>

RTL (text-overflow:ellipses)
<div id="testRTLEllipses" class="testDiv forcertl ellipses" contenteditable="true">the the adlj adaasj sdklj. there there</div>

<script>
if (window.internals)
  document.getElementById('warning').style.display = 'none';
if (window.testRunner) {
  testRunner.setBackingScaleFactor(
      2,
      () => setTimeout(() => testRunner.notifyDone(), 0));
}

// This tests the correct placement of inline spelling and grammar markers in
// text. Markers should line up exactly under misspelled words in all cases.

// 'adlj', adaasj', 'sdklj'.
const spellingMarkerRanges = [[8, 4], [13, 6], [20, 5]];

// 'the', 'there'.
const grammarMarkerRanges = [[4, 3], [33, 5]];

['testLTR', 'testRTL', 'testLTREllipses', 'testRTLEllipses'].forEach(id => {
  const div = document.getElementById(id);
  const text = div.firstChild;

  spellingMarkerRanges.forEach(markerRange => {
    const range = document.createRange();
    range.setStart(text, markerRange[0]);
    range.setEnd(text, markerRange[0] + markerRange[1]);
    if (window.internals)
      internals.setMarker(document, range, 'spelling');
  });

  grammarMarkerRanges.forEach(markerRange => {
    const range = document.createRange();
    range.setStart(text, markerRange[0]);
    range.setEnd(text, markerRange[0] + markerRange[1]);
    if (window.internals)
      internals.setMarker(document, range, 'grammar');
  });
});
</script>
</body>
</html>
